package br.com.sovi.gwt.server.service.historico;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import br.com.sovi.gwt.client.entity.Historico;
import br.com.sovi.gwt.client.entity.HistoricoPoint;
import br.com.sovi.gwt.client.historico.service.HistoricoService;
import br.com.sovi.gwt.server.Constants;
import br.com.sovi.gwt.server.json.entity.DispositivoVO;
import br.com.sovi.gwt.server.json.entity.PontoVO;
import br.com.sovi.gwt.server.rest.RestController;
import br.com.sovi.gwt.server.service.CurrentUsuario;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.sun.jersey.api.client.GenericType;

@SuppressWarnings("serial")
public class HistoricoServiceImpl extends RemoteServiceServlet implements HistoricoService {

	public List<String> getAllDispositivos() {
		try {
			String url = Constants.BASE_URL + "/dispositivo/allByEmpresa?codigoEmpresa="
					+ CurrentUsuario.getCurrent().getCodigoEmpresa();

			List<DispositivoVO> array = (List<DispositivoVO>) RestController.get(url,
					new GenericType<List<DispositivoVO>>() {
					});

			int length = array.size();

			List<String> list = new ArrayList<String>();

			for (int i = 0; i < length; i++) {
				list.add(array.get(i).getSerial());
			}

			return list;
		}
		catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public Historico getPontoByDispositivoAndDate(String dispositivo, Date inicialDate, Date finalDate) {
		try {
			StringBuilder url = new StringBuilder();
			url.append(Constants.BASE_URL).append("/ponto/findByEmpresaAndData");

			url.append("?dispositivo=").append(dispositivo);
			url.append("&dataInicial=").append(Constants.sdf.format(inicialDate));
			url.append("&dataFinal=").append(Constants.sdf.format(finalDate));

			GWT.log("HistoricoServiceImpl.getPontoByDispositivoAndDate(): " + url.toString(), null);

			List<PontoVO> pontos = (List<PontoVO>) RestController.get(url.toString(), new GenericType<List<PontoVO>>() {
			});

			List<HistoricoPoint> cups = new ArrayList<HistoricoPoint>();

			for (PontoVO pontoVO : pontos) {
				cups.add(new HistoricoPoint(pontoVO.getData(), pontoVO.getLatitude(), pontoVO.getLongitude()));
			}

			return new Historico(dispositivo, null, false, true, 13, cups);
		}
		catch (Throwable e) {
			e.printStackTrace();
			return null;
		}
	}

}
